﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bibilioteca.DataAccess;
using Bibilioteca.Models;
using System.Data;

namespace Bibilioteca.Dominio
{
    public class NegocioCuentas
    {
        private CuentasDao cuentasDao;

        public NegocioCuentas()
        {
            cuentasDao = new CuentasDao();
        }

        

        /*
         * Dado un numero de socio lo busca en la BD y lo retorna.
         */
        public Cuenta GetCuentaDeSocio(string id)
        {
            Cuenta c = null;
            cuentasDao.socioId = Convert.ToInt32(id.Trim());
            DataTable tabla = cuentasDao.GetCuentaDeSocio();
            foreach (DataRow row in tabla.Rows)
            {
                c = new Cuenta(Convert.ToInt32(row["cuenta_id"]), 
                               Convert.ToString(row["cuenta_user"]), 
                               Convert.ToString(row["cuenta_pass"]),
                               Convert.ToInt32(row["cuenta_socio_id"]), 
                               Convert.ToBoolean(row["cuenta_esAdmin"]),
                               Convert.ToInt32(row["cuenta_reservasActivas"]), 
                               Convert.ToInt32(row["cuenta_prestamosActivos"]),
                               Convert.ToBoolean(row["cuenta_habilitada"]));
                return c;
            }

            return new Cuenta(0);
        }


        /*
         * Dado un numero de socio lo busca en la BD y lo retorna.
         */
        public Cuenta GetCuentaDeUsuario(string user)
        {
            Cuenta c = null;
            cuentasDao.usuario = user;
            DataTable tabla = cuentasDao.GetCuentaDeUser();
            foreach (DataRow row in tabla.Rows)
            {
                c = new Cuenta(Convert.ToInt32(row["cuenta_id"]),
                               Convert.ToString(row["cuenta_user"]),
                               Convert.ToString(row["cuenta_pass"]),
                               Convert.ToInt32(row["cuenta_socio_id"]),
                               Convert.ToBoolean(row["cuenta_esAdmin"]),
                               Convert.ToInt32(row["cuenta_reservasActivas"]),
                               Convert.ToInt32(row["cuenta_prestamosActivos"]),
                               Convert.ToBoolean(row["cuenta_habilitada"]));
                return c;
            }

            return new Cuenta(0);
        }


        public void modificarCuenta(Cuenta cuenta)
        {
            cuentasDao.paramID = cuenta.Id;
            cuentasDao.usuario = cuenta.Usuario;
            cuentasDao.password = cuenta.Password;
            cuentasDao.socioId = cuenta.socioId;
            cuentasDao.esAdmin = cuenta.esAdmin == true ? 1 : 0;
            cuentasDao.reservas = cuenta.Reservas;
            cuentasDao.prestamos = cuenta.Prestamos;
            cuentasDao.habilitada = cuenta.Habilitada == true ? 1 : 0;

            if (cuenta != null && cuenta.Id != 0)
                cuentasDao.modificarCuenta();
        }

        public void insertarCuenta(Cuenta cuenta)
        {
            cuentasDao.usuario = cuenta.Usuario;
            cuentasDao.password = cuenta.Password;
            cuentasDao.socioId = cuenta.socioId;
            cuentasDao.esAdmin = 0; //Una vez creada la cuenta, dentro de sus detalles se lo puede nombrar admin
            cuentasDao.reservas = 0;
            cuentasDao.prestamos = 0;
            cuentasDao.habilitada = 1;

            cuentasDao.insertarCuenta();
        }

        public void eliminarCuenta(int id)
        {
            cuentasDao.paramID = id;
            if (id != 0)
                cuentasDao.eliminarCuenta();
        }

        public void deshabilitarCuenta(int id)
        {
            if (id != 0)
            {
                cuentasDao.paramID = id;
                cuentasDao.habilitada = 0;
                cuentasDao.modificarCuenta();
            }
        }

        public void habilitarCuenta(int id)
        {
            if (id != 0)
            {
                cuentasDao.paramID = id;
                cuentasDao.habilitada = 1;
                cuentasDao.modificarCuenta();
            }
        }

        public void nombrarAdmin(int id)
        {
            if (id != 0)
            {
                cuentasDao.paramID = id;
                cuentasDao.esAdmin = 1;
                cuentasDao.modificarCuenta();
            }
        }

        public void desnombrarAdmin(int id)
        {
            if (id != 0)
            {
                cuentasDao.paramID = id;
                cuentasDao.esAdmin = 0;
                cuentasDao.modificarCuenta();
            }
        }


    }
}